package com.pad.dpscn.daag.sdk.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 
 * com.pad.dpscn.daag.sdk.core.annotation
 * Description:使用RetentionPolicy.RUNTIME，意味着该注解会在运行时保留，可以通过反射机制读取
 * 
 * @author yangdechao
 * @since 2024年3月11日
 * @version 1.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) // 使用ElementType.TYPE，表示该注解应用于类、接口(包括注解类型)或enum声明
public @interface DataMapperIntercept {

	// 定义主键字段的映射关系，返回PrimaryKeyField数组，默认值为空数组
	public PrimaryKeyField[] pk() default {};

	// 定义一个内部注解PrimaryKeyField，用于描述主键字段的映射信息
	@Retention(RetentionPolicy.RUNTIME)
	@Target({ ElementType.FIELD }) // 这里应该是有误的，Target应指定ElementType，否则无法确定该注解应用的目标
	public @interface PrimaryKeyField {
		// 返回PO类中的属性名
		String propertyName();

		// 返回对应的数据库字段名
		String columnName();
	}

	// 返回数据库表名
	String tableName();

	// 定义一个枚举类型Operation，包含INSERT, UPDATE, DELETE三种操作
	enum Operation {
		INSERT, UPDATE, DELETE
	}

	// 定义该注解支持的数据库操作，返回Operation数组，默认值为INSERT操作
	Operation[] operation() default Operation.INSERT;
}